package uno.rocc.common.core.service;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * @param <Q> 查询参数封装
 * @param <T> DAO对象
 * @param <R> 响应VO对象
 */
public interface BaseService<Q, T, R> extends IService<T> {

    /**
     * 默认实现，无参数查询列表
     *
     * @param page
     * @param queryParam
     */
    default Page<R> list(Page<T> page, Q queryParam) {
        this.page(page);

        //TODO 稍后做
        return (Page<R>) page;
    }

    /**
     * 模糊查询
     *
     * @param query
     * @param func
     * @param value
     */
    default void addConditionLike(LambdaQueryWrapper<T> query, SFunction<T, ?> func, Object value) {
        if (!ObjectUtil.isNull(value)) {
            query.like(func, String.format("%%%s%%", value));
        }
    }

    /**
     * 等值查询
     *
     * @param query
     * @param func
     * @param value
     */
    default void addConditionEq(LambdaQueryWrapper<T> query, SFunction<T, ?> func, Object value) {
        if (!ObjectUtil.isNull(value)) {
            query.eq(func, value);
        }
    }

}
